Mobile devices with high quality cameras and microphones, such as mobile phones, now have enough processing power and network connectivity that they can be used as effective live, real-time video broadcasters. Indeed, live mobile broadcasting has become a popular activity and numerous companies are exploring how to commercialize applications that allow people to share live video.
Broadcasting video over networks generally, and live video in particular, presents various issues that impact delivery of a high quality viewing experience. These issues include adapting to multiple networks and their differing and/or changing characteristics, addressing end-to-end delays in delivering video streams (latency), and—pertinent to the present invention—“lossy” networks. Lossy networks are networks that fail to provide reliable and timely transmission of data.
As a result, adaptive streaming technologies have been developed that use segmentation of video, including those based on the standard Hypertext Transfer Protocol (HTTP), e.g., Apple, Inc.'s HLS Live Streaming (HLS), Adobe Systems, Inc.'s HTTP Dynamic Streaming, Microsoft Corp.'s SmoothStreaming, and Moving Pictures Experts Group's Dynamic Adaptive Streaming over HTTP. Video streams are reformatted to adapt to unique and varying requirements of individual networks and/or viewing platforms. Video segments are containers in a format suitable for the transmission of video. Segments enable adaptive streaming. Segments are also particularly useful where transmission is not guaranteed reliable (lossy networks).
These adaptive streaming technologies use manifests to provide information regarding the transmitted video segments, and the location of the segments in the order in which they should be played. Manifests can, e.g., indicate that the next video segment to be played differs in form from the previous segment played. These indicators, such as the HLS tag #EXT-X-Discontinuity, are commonly used to insert commercials into a video stream. In such a case, the clock reference and timestamps of the two video sources will likely not match. For streaming live video, manifests are constructed in such a way that the manifest can be dynamically updated (a “live playlist”)—old segment locations are deleted and new ones are added. When acting as live playlists, manifests do not end. The manifest acts like a “sliding window.” If segments and manifests are constructed correctly, a viewer program can play the segments smoothly, resulting in a pseudo-live video presentation.
However, networks can frequently be unreliable or untimely in their transmission of data. These lossy networks lose segments and deliver segments out of order. When this occurs, the pseudo-live video presentation can be interfered with, interrupted, or even stopped. What is needed, therefore, are systems and algorithms for a network-loss tolerant mobile broadcasting systems that reliably and efficiently address lost and out-of-order segments.